<?php
/**
 * Created by PhpStorm.
 * User: Allen
 * Date: 2017/2/14
 * Time: 12:05
 */

namespace EWeiLink\JuPai\Http\Controllers;


use EWeiLink\JuPai\JpControllerTrait;
use EWeiLink\JuPai\JuPai;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;

class ApiController
{
    use JpControllerTrait;

    public function qrcode(Request $request) {

        $ip = $request->getClientIp();
        $key = ip2long($ip);

        $alias = JuPai::alias;
        $company = JuPai::makeBridgeClass('App\Models\Company', []);
        $jpCompany = $company::where('alias', $alias)->first();
        if (is_null($jpCompany)) {
            return $this->_error("没有找到此公司！");
        }

        $wxClient = JuPai::makeBridgeClass('App\Models\WxClient', []);
        // 查询缓存中是否存在
        $cacheId = Redis::get($key);
        // 缓存中不存在
        if (is_null($cacheId)) {
            $wx_ids = $wxClient::where('company_id', $jpCompany->_id)
                ->get()
                ->pluck('_id')
                ->all();

            if (!empty($wx_ids)) {
                $index = array_rand($wx_ids);
                $wxClientId = $wx_ids[$index];
                return $this->getQrcodePic($key, $wxClientId);
            } else {
                return $this->_error('该公司下没有微信号');
            }
        } else {
            // 缓存中存在
            $wx_ids = $wxClient::where('company_id', $jpCompany->_id)
                ->where('_id', '!=', $cacheId)
                ->get()
                ->pluck('_id')
                ->all();

            if (!empty($wx_ids)) {
                $index = array_rand($wx_ids);
                $wxClientId = $wx_ids[$index];
                return $this->getQrcodePic($key, $wxClientId);
            } else {
                // 如果缓存存在  查出来是空的  那么直接返回缓存中的那个
                return $this->getQrcodePic($key, $cacheId);
            }
        }

    }

    protected function getQrcodePic($key, $wxClientId) {
        // 获取图片
        $path = config('filesystems.qrcode.img')
            . '/' . $wxClientId . '.png';
        if (file_exists($path)) {
            // 二维码图片存在 缓存wxClientId到redis中
            Redis::set($key, $wxClientId);
            // 设置过期时间
            Redis::expire($key, env('WX_CLIENT_ID', env('WX_CLIENT_ID_DeadTime', 1200)));
            $img_content = file_get_contents($path);
            header("content-type: image/png");
            echo $img_content;
            exit;
        } else {
            return $this->_error('该微信号没有二维码图片');
        }
    }
    
}
